/**
 * 
 */
package cn.springsoter.core.launch.utils;

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

import cn.springsoter.core.launch.constant.AppConstant;

/**
 * jasypt加/解密工具类
 * 
 * @author kevin
 *
 */
public class JasyptUtil {
	/**
     * 指定密钥加密
     *
     * @param password 密钥（加解密也必须用同一个密钥）
     * @param value    待加密的明文
     * @return
     */
    public static String encyptPwd(String password, String value) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(cryptor(password));
        String result = encryptor.encrypt(value);
        return result;
    }

    /**
     * 使用默认密钥加密
     * 
     * @param value	待加密的明文
     * @return
     */
    public static String encyptPwd(String value) {
    	return JasyptUtil.encyptPwd(AppConstant.JASYPT_PASSWORD, value);
    }
    /**
     * 指定密钥解密
     *
     * @param password 密钥（加解密也必须用同一个密钥）
     * @param value    待解密的密文
     * @return
     */
    public static String decyptPwd(String password, String value) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setConfig(cryptor(password));
        String result = encryptor.decrypt(value);
        return result;
    }
    
    /**
     * 使用默认密钥解密
     * 
     * @param value	待解密的密文
     * @return
     */
    public static String decyptPwd(String value) {
    	return JasyptUtil.decyptPwd(AppConstant.JASYPT_PASSWORD, value);
    }

    /**
     * 加解密配置
     * 
     * @param password	密钥（加解密也必须用同一个密钥）
     * @return
     */
    private static SimpleStringPBEConfig cryptor(String password) {
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm(AppConstant.JASYPT_ALGORITHM);
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("4");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base64");
        return config;
    }
}
